iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 23
1
Modern Web

30天學習Spring MVC系列 第 23

Day23 Spring MVC例外處理篇(Exception Handling in Spring MVC)[上]

  • 分享至 

  • xImage
  •  

前言

當我們再撰寫程式的時候,必須要養成一個良好的習慣,每個業務邏輯要加上例外處理的判斷,Java程式語言中可以使用try{}catch(Exception ex){}的敘述來將我們的Business Logic代碼包覆,以避免程式再執行的途中發生了錯誤而造成無法挽回的狀況,如果當妳的處理金流的程式再某行中發生了問題,金額沒有處理好而造成了公司的財務損失,小則賠錢大則公司會因此而倒閉!
Web中常見的發生例外時,我們會將執行的數據訪問修改做roll back再將錯誤代碼與錯誤訊息紀錄起來,以利於程式人員做DEBUG的效率,再來我們可以將訪問者導到一個error.html的頁面,此頁面是當程式出現錯誤,發生例外時才做導向的工作

ex:SQLExceptions,NullPointerException等錯誤

介紹Spring框架如何處理例外

Spring MVC處理例外主要有三種配置方式
1.全局配置
2.單一Controller
3.單一方法配置

1.全局配置透過註解@ControllerAdvice的控制器來配置我們全局控制器異常處理,在此註解中包含了三個常用註解

  • @ExceptionHandler(用於全局控制器裡的異常)
  • @InitBinder(用於設置WebDataBinder),WebDataBinder是用來自動綁定前台請求參數到Model中
  • @ModelAttribute(用於綁定鍵值數據到Model中)

全局控制器例外處理配置

package com.tutorial.Controller;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice
public class ExceptionHandlerAdvice {
	@ExceptionHandler(value = Exception.class)
	public ModelAndView exception(Exception ex,WebRequest request){
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("errorSomething","somerror");
		modelAndView.setViewName("error");
		return modelAndView;
	}
	//如果我們要讓所有的@RequestMapping擁有此鍵值
	@ModelAttribute
	public void addAttribute(Model md){
		md.addAttribute("message","你可以設定一些錯誤訊息");
	}	
}

1.ModelAndView是一個類別(class)
2.addObject方法可以增加錯誤訊息在這方法在利用前台映射取出數值
3.setViewName方法為要返回的錯誤頁面 記住!! 我們如果有使用thymeleaf就放置在對應的classpath底下,我的配置是在於src/main/resources->error.html中

重點與心得

1.一般我們建議配置一個全局的例外處理來做一個導頁狀況,盡量不顯示狀態碼或異常讓別人知道訊息內容,搭配著Log日誌來做一個除錯的處置
2.在傳統配置中我們會使用web.xml來做一個錯誤導頁的處置 ,
ex:

<web-app …>
    <error-page>
        <error-code>404</error-code>
        <location>error.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>error.jsp</location>
    </error-page>
    <error-page>
        <error-code>504</error-code>
        <location>error.jsp</location>
    </error-page>
    <error-page>
        <error-code>405</error-code>
        <location>error.jsp</location>
    </error-page>
    以下略....
</web-app>

error.html

<div class="container">
        <div class="row">
            <div class="col-md-4 col-md-offset-4">
                <div class="login-panel panel panel-default">
                    <div class="panel-body">
                        此頁面不存在..可以參考底下網址...加入要讓使用者看的錯誤訊息
                        <p th:utext="${exception}"></p>
                    </div>
                </div>
            </div>
        </div>
    </div>

成功示意圖:

https://ithelp.ithome.com.tw/upload/images/20180112/201078124ibI4t91aM.png

參考資料

(https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc )
(http://www.baeldung.com/exception-handling-for-rest-with-spring )


上一篇
Day 22 Spring Boot 單元測試(Unit Test)-MockMvc框架介紹
下一篇
Day24 Spring MVC例外處理篇(Exception Handling in Spring MVC)[下]
系列文
30天學習Spring MVC30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言